Triggers হল বিশেষ ধরনের স্টোরড প্রোগ্রাম যা নির্দিষ্ট ডেটাবেস ইভেন্টের জন্য স্বয়ংক্রিয়ভাবে কার্যকর হয়। এগুলি সাধারণত INSERT, UPDATE, বা DELETE অপারেশনগুলির পরে কার্যকর হয় এবং ডেটাবেসে স্বয়ংক্রিয় কার্যক্রম (যেমন ডেটা ভ্যালিডেশন, লগিং, বা হিসাব সংরক্ষণ) পরিচালনা করতে ব্যবহৃত হয়।
Row Level এবং Statement Level Triggers হল দুটি প্রধান প্রকারের ট্রিগার। এগুলির মধ্যে পার্থক্য ডেটাবেস অপারেশনের প্রতি প্রতিক্রিয়া এবং প্রক্রিয়াকরণের স্তরের উপর নির্ভর করে।
১. Row Level Triggers (রো-লেভেল ট্রিগার)
Row Level Triggers হল এমন ট্রিগার যা প্রতিটি রেকর্ডের জন্য একাধিক বার চালানো হয়। এটি একটি নির্দিষ্ট INSERT, UPDATE, বা DELETE অপারেশন দ্বারা প্রভাবিত প্রতিটি রো-এর জন্য কার্যকর হয়।
কিভাবে কাজ করে:
- যখন কোনো INSERT, UPDATE, বা DELETE অপারেশন একটি বা একাধিক রেকর্ডে পরিবর্তন ঘটায়, তখন এই ট্রিগারটি প্রতিটি রেকর্ডের জন্য একে একে কার্যকর হয়।
- একে একে প্রভাবিত রেকর্ডগুলির উপর প্রক্রিয়া চালানো হয়।
সিনট্যাক্স:
CREATE TRIGGER trigger_name
ON table_name
FOR INSERT, UPDATE, DELETE
AS
BEGIN
-- Trigger body
-- Perform operations for each affected row
END;
উদাহরণ:
ধরা যাক, একটি Employees টেবিল আছে এবং আপনি চান যে যখন কোনো কর্মচারী বেতন আপডেট হবে, তখন তার পুরানো বেতন SalaryHistory টেবিলে সংরক্ষণ করা হোক।
CREATE TRIGGER trg_UpdateSalary
ON Employees
FOR UPDATE
AS
BEGIN
-- Salary history table এ পুরানো বেতন সংরক্ষণ করা
INSERT INTO SalaryHistory (EmployeeID, OldSalary, ChangeDate)
SELECT EmployeeID, Salary, GETDATE()
FROM inserted;
END;
এখানে:
- inserted হলো একটি virtual table যা UPDATE অপারেশনের পরে সংশোধিত রেকর্ডগুলি ধারণ করে।
- প্রতিটি আপডেট হওয়া রেকর্ডের জন্য SalaryHistory টেবিলে পুরানো বেতন সংরক্ষণ করা হচ্ছে।
বিশেষত্ব:
- Row Level Triggers একে একে সমস্ত পরিবর্তিত রেকর্ডে কার্যকর হয়, তাই যখন একাধিক রেকর্ড প্রভাবিত হয়, তখন ট্রিগারটি বারবার চালানো হয়।
- এটি সাধারণত complex business logic বা validation করতে ব্যবহৃত হয়, যেখানে প্রতিটি রেকর্ডের জন্য আলাদাভাবে অপারেশন করা প্রয়োজন।
২. Statement Level Triggers (স্টেটমেন্ট-লেভেল ট্রিগার)
Statement Level Triggers হল এমন ট্রিগার যা একবারে পুরো স্টেটমেন্টের জন্য কার্যকর হয়, যে স্টেটমেন্টটি INSERT, UPDATE, বা DELETE অপারেশন সম্পাদন করছে, তা যত রেকর্ডেই প্রভাব ফেলুক না কেন। এই ট্রিগারটি শুধুমাত্র একটি স্টেটমেন্টের জন্য একবার চালানো হয়।
কিভাবে কাজ করে:
- যখন একটি INSERT, UPDATE, বা DELETE অপারেশন সম্পন্ন হয়, তখন Statement Level Trigger পুরো অপারেশনটির উপর একবার কার্যকর হয়, তা যত রেকর্ডেই প্রভাব ফেলুক না কেন।
- এটি সাধারণত সিস্টেমের জন্য সাধারণ লগিং বা ব্যাচ অপারেশন চালানোর জন্য ব্যবহৃত হয়, যেখানে প্রতিটি রেকর্ডের উপর আলাদাভাবে কাজ করার প্রয়োজন হয় না।
সিনট্যাক্স:
CREATE TRIGGER trigger_name
ON table_name
FOR INSERT, UPDATE, DELETE
AS
BEGIN
-- Trigger body
-- Perform operations for the entire statement
END;
উদাহরণ:
ধরা যাক, একটি AuditLogs টেবিল আছে এবং আপনি চান যে যখন কোনো Employees টেবিলের কোনো রেকর্ড UPDATE হবে, তখন পুরো অপারেশনের একটি লগ AuditLogs টেবিলে রেকর্ড হোক।
CREATE TRIGGER trg_AuditEmployeeUpdate
ON Employees
FOR UPDATE
AS
BEGIN
INSERT INTO AuditLogs (Action, TableName, ActionDate)
VALUES ('UPDATE', 'Employees', GETDATE());
END;
এখানে:
- যখন Employees টেবিলের কোনো UPDATE অপারেশন ঘটে, তখন AuditLogs টেবিলে একটি লগ রেকর্ড করা হবে।
- এটি একটি স্টেটমেন্ট-লেভেল ট্রিগার, তাই সমস্ত আপডেটের জন্য একবারেই কার্যকর হবে।
বিশেষত্ব:
- Statement Level Triggers শুধুমাত্র INSERT, UPDATE, বা DELETE অপারেশন সম্পন্ন হওয়ার পর একবারই চালানো হয়, তা যত রেকর্ডই প্রভাবিত করুক না কেন।
- এটি সাধারণত system-wide logging, batch updates, বা generic auditing এর জন্য ব্যবহৃত হয়।
৩. Row Level এবং Statement Level Triggers এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Row Level Triggers | Statement Level Triggers |
|---|---|---|
| কাজের স্তর | একে একে প্রতিটি রেকর্ডের জন্য কার্যকর | পুরো স্টেটমেন্টের জন্য একবার কার্যকর |
| ব্যবহার | যখন প্রতিটি রেকর্ডের উপর কাজ করতে হয় | যখন পুরো অপারেশন বা স্টেটমেন্টের জন্য কাজ করতে হয় |
| কার্যকর হওয়া | প্রতিটি প্রভাবিত রেকর্ডের জন্য কার্যকর | একবার, পুরো স্টেটমেন্ট সম্পন্ন হলে কার্যকর |
| পারফরম্যান্স | অনেক রেকর্ড প্রভাবিত হলে পারফরম্যান্স কমে যেতে পারে | একটি স্টেটমেন্টের জন্য একবারই কাজ হয়, তাই পারফরম্যান্স ভালো |
| ব্যবহার ক্ষেত্র | ব্যবসায়িক লজিক, ভ্যালিডেশন, বা প্রতিটি রেকর্ডের জন্য অ্যাকশন | সিস্টেম লগিং, অডিটিং, ব্যাচ প্রক্রিয়া |
সারাংশ
Row Level Triggers এবং Statement Level Triggers উভয়ই ডেটাবেসের INSERT, UPDATE, বা DELETE অপারেশনগুলির পরে স্বয়ংক্রিয়ভাবে কার্যকর হয়, তবে তাদের কাজের প্রক্রিয়া ভিন্ন। Row Level Triggers একে একে প্রতিটি রেকর্ডের জন্য কাজ করে, যা জটিল লজিক বা প্রতিটি রেকর্ডের জন্য পৃথকভাবে কাজ করার জন্য উপকারী। অন্যদিকে, Statement Level Triggers পুরো অপারেশন বা স্টেটমেন্টের জন্য একবার কার্যকর হয় এবং সাধারণত সিস্টেম স্তরের কাজের জন্য ব্যবহৃত হয়।
Read more